#!/usr/bin/python
# -*- coding:UTF8 -*-
import re

# [0-9][^0-9]   和\d和\D  \s和\S  \w和\W,  \b和\B
num_s = '_156%^^&*5999**^%张三\nkcm_#\t'
print(re.findall('\s', num_s))  # 匹配空白字符，包括空格，换行，制表符等等，相当于[\t\n\r\f\v]
print(re.findall("\S", num_s))  # 与\s相反
print(re.findall("\d", num_s))  # 匹配数字。相当于[0-9]
print(re.findall("\D", num_s))  # 与\d相反
print(re.findall("\w", num_s))  # 匹配中文，下划线，数字，英文，相当于[a-zA-z0-9_]
print(re.findall("\W", num_s))  # 与\W相反，匹配特殊字符，如$,&,空格,\n,\t等等
print(re.findall("[0-9]", num_s))  # 匹配数字[0-9]
print(re.findall('[^0-9]', num_s))  # 匹配非数字[0-9]

# 贪婪和非贪婪
num_s = 'Excel6%^^&*5999word张三\nPPT_#\t'
print(re.findall('[a-zA-Z]{3,5}', num_s))  # 贪婪模式下，挨个找字母相连最少为3个，最多为5个的
print(re.findall('[a-zA-Z]{3}', num_s))  # 非贪婪模式下，挨个找字母相连为3个的

# 模糊查询 *，+，？
num_s = 'exc_#Exce三Excel6Excelll999\nExcelllll\t'
print(re.findall('Excel*', num_s))  # 匹配0次或无限次，重复在*号之前的字符(注意Excel的‘l’,去掉一个‘l’和多个‘l’的都要)
print(re.findall('Excel+', num_s))  # 匹配1次或无限次，重复在*号之前的字符(注意Excel的‘l’，一个‘l’和多个‘l’的都要)
print(re.findall('Excel?', num_s))  # 匹配0次或1次，重复在*号之前的字符(注意Excel的'l'，去掉一个‘l’和只有一个‘l’的都要，重复‘l’的部分不要)
